package org.groovymud.shell.io;

import org.groovymud.shell.io.filters.TerminalFilterChain;
import org.groovymud.shell.io.filters.TerminalIOFilter;

import javax.servlet.FilterChain;
import java.io.IOException;
import java.util.List;

public interface TerminalIO {

	public void write(String string) throws IOException;

	public void flush() throws IOException;

	public void bell() throws IOException;

	public void close() throws IOException;

	public boolean defineScrollRegion(int arg0, int arg1) throws IOException;

	public String deleteCharacters(String str, int number) throws IOException;

	public void eraseLine() throws IOException;

	public void eraseScreen() throws IOException;

	public void eraseToBeginOfLine() throws IOException;

	public void eraseToBeginOfScreen() throws IOException;

	public void eraseToEndOfLine() throws IOException;

	public void eraseToEndOfScreen() throws IOException;

	public void forceBold(boolean arg0) throws IOException;

	public int getColumns() throws IOException;

	public List getPreviousCommands() throws IOException;

	public int getRows() throws IOException;

	public void homeCursor() throws IOException;

	public boolean isLineWrapping() throws IOException;

	public void moveCursor(int arg0, int arg1) throws IOException;

	public void moveDown(int arg0) throws IOException;

	public void moveLeft(int arg0) throws IOException;

	public void setBold(boolean arg0) throws IOException;

	public void setCursor(int arg0, int arg1) throws IOException;

	public  void setForegroundColor(int arg0) throws IOException;
	
	public  void setBackgroundColor(int arg0) throws IOException;

	public void write(char arg0) throws IOException;

	public void write(byte arg0) throws IOException;

	public void storeCursor() throws IOException;

	public void writeln(String string) throws IOException;

	public String readln(boolean b) throws IOException;

    public void setFilterChain(TerminalFilterChain<org.groovymud.shell.io.TerminalIO> filterChain);

    public TerminalFilterChain<org.groovymud.shell.io.TerminalIO> getFilterChain();

}
